package com.nkzy.controller;

import com.nkzy.pojo.Result;
import com.nkzy.pojo.User;
import com.nkzy.service.UserService;
import jakarta.validation.constraints.Pattern;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 这是一个和用户相关的控制器类，它主要完成前后端进行交互
 * 成为控制器类有两个注解：
 * @Controller：表示是控制器类，但返回值是字符串
 * @RestController：表示是控制器类，但是返回值是JSON数据
 * @RequestMapping:映射、链接web网页路径URl
 * 后端开发是按照三层架构来进行的：
 * 1.Mapper层：是数据访问层，需要写SqL语句，完成对表的操作
 * 在这一层所有的方法写完，需要进行单元测试
 * 2.Servicen层：业务逻辑层：这一层主要完成业务功能
 * 在这层需要调用Mapper的方法，需要注入Mapper对象
 * 在这一层方法编写完成，需要进行单元测试
 * 3.Controoler层：控制层，又称为表现层，是前端和后端交互的桥梁
 * 在这一层需要进行接口测试
 * 常用的接口测试工具有两个：PoseMan、JMetter
 * 我们使用PostMan进行接口测试
 * JMetter也可以进行接口测试，又能进行性能测试
 *
 */
@RestController
@RequestMapping("/user")
public class UserController {
    //控制器层要使用业务层对象，应该怎么用？依赖注入
    @Autowired //依赖注入
    private UserService userService;
    //在类中编写和用户相关的所有方法，这些 方法我们就叫接口
    //注册接口（方法）：方法的返回值是Result类型，参数是：username\password
    @PostMapping("/register")
    public Result register(@Pattern(regexp = "^\\S{5,16}$") String username,
                           @Pattern(regexp = "^\\S{5,16}$") String password){
        //1.控制器层要调用业务层的方法（根据用户名查找用户的方法），
        //在业务层有一个根据用户名查找用户的方法，查到用户返回
        User u=userService.findUserByName(username);
        //判断用户是否存在
        if(u==null){
            //用户没有被占用，进行注册
            userService.register(username,password);
            //注册成功
            return Result.success();
        }else{
            //用户被 占用
            return Result.error("用户名已被占用");
        }
    }
    //登录在方法


}

















